In order for a plugin function to work on a server you have to create a config file on that server and set the read permission to everyone. The path of this file should be as follows:
| macOS | /Library/FileMaker Server/Data/24U/24uPluginsAllowedFunctions.txt |
| Win | C:FilesServer\24U\24uPluginsAllowedFunctions.txt |
SimpleTalk plugin functions won’t work on server in these cases:
Every line represents one database, first is the name of the database (with suffix .fmp12) followed by a tabulator and then function names separated by ‘|’ (vertical bar). Alternatively, use name of the database (with suffix .fmp12) followed by a tabulator and then the word “any” if you want to allow all the plugin functions. You can find template of 24uPluginsAllowedFunctions.txt in Examples.
In following example:
STalk_Send, STalk_Connect and
STalk_Get. Calling function other then those 3 will
fail.MyFileMakerDatabaseOnServer.fmp12 any
MyOtherFileMakerDatabaseOnServer.fmp12 STalk_Send|STalk_Connect|STalk_GetReturns version string of the active 24U SimpleTalk Plug-In, formatted as requested by the parameter.
| versionFormat | Defines the format of the returned version. |
| “short” | To get just the version number. Default value. |
| “long” | To get the plug-in name followed by its version number. |
| “platform” | To get the platform of the code currently running on. |
| “autoupdate” | To get autoupdate compatible (comparable) version number. |
This function is very important and it has the same output format in all 24U Plug-Ins. You should call this function every time you need to check if the plug-in is properly installed to the FileMaker. Even if the plug-in is not registered (or badly registered), this function should work. Calling this function in the startup script of your solution is recommended.
Returns requested version format or platform. If this function returns “?”, the plug-in is not properly installed or FileMaker cannot load and activate it for some reason.
STalk_Version( "long" )This will return the plug-in name and its version. In this case, the output is “24U SimpleTalk Plug-In 3.1”.
Provides special functionality to operate with plugin serial numbers.
| SerialNumber | Register given SerialNumber and return an error code. |
| EmailAddress | Tries to activate with given email address and return an error code. Trial version is valid only after you confirm email. |
| Hash | Activate a serial number with a hash received from 24U. Used for offline activation. |
| “Registration Window” | Show the “Registration window” and return 0. |
| “About Window” | Show the “About window” and return 0. |
| “Status” | Return the actual registration state of the plugin: Demo, Demo expired, Trial, Trial Expired, Registered or Dead. |
| “Unregister” | Unregister all serial numbers related to the product and return an error code. Note: after this trial version days wont come back. |
| “Info” | Returns current plugin status and its registered serial numbers. |
| “ActivationChallenge” | Returns generated challenge string. This string is sent to 24U. |
| “Purchase” ; webAddress | Opens web browser with given webAddress. Given webAddress should point to 24U Store. This functionality is not implemented for FileMaker Server and Linux. |
Use this function to register or unregister 24U SimpleTalk Plug-In, to get information about current registration state, or to invoke GUI providing basic registration information and purchase capabilities.
Returns “0” if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Register( "STL20C016-BXMW-VNW7-L8AJ-3KGX-VWG8")This function will register the plug-in with client serial number STL20C016-BXMW-VNW7-L8AJ-3KGX-VWG8 for 16 users.
STalk_Register( "user@mail.com" )In case you do not have a serial number but you want to try the plug-in out, use the string with your email address as selector.
STalk_Register( "unregister" )This function will unregister every serial number related to 24U SimpleTalk Plug-In.
STalk_Register( "About window" )Similar to opening FileMaker preferences, navigating to the Plug-Ins tab and double-clicking on 24U SimpleTalk Plug-In.
Note: All serial numbers here are only for demonstration purposes. They will not work in the plug-in.
| port | port number to listen on |
| connectionOptions | List of options for this connection in format “option1=value1¶option2=value2”. For more information see connectionOptions table. If empty string -> default options are used. |
| terminator | string for splitting the data (default is CRLF, see the note below) This value is also used as a default terminator for all further server connections. |
| Options | Supported Values |
|---|---|
| protocol | “TCP”, “UDP”, “DICOM” (please see DICOM requirements below). If this option is not defined TCP will be used. |
| datahandler | name of script to run (default is built-in handler), when new data are received. Please read note to enable handlers in FileMaker version 19.2.1 and newer |
| openhandler | name of script to run (default is built-in handler), when new connection is opened. Please read note to enable handlers in FileMaker version 19.2.1 and newer |
| closehandler | name of script to run (default is built-in handler), when connectionis closed. Please read note to enable handlers in FileMaker version 19.2.1 and newer |
| encoding | “UTF-8”, “UTF-16”, “UTF-16BE”, “UTF-16LE”, “ASCII”, “Hex” (see the note below). This value is also used as a default encoding for all further server connections. If this value is not defined UTF-8 will be used. |
| UDPSocketType | “Unicast”, “Broadcast”, “Multicast”. If this option is not defined Unicast UPD server will be created. Works only with UDP protocol. |
| MulticastGroup | Specifies Group for Multicast connections. Works only with UDP protocol with “Multicast” UDPSocketType. A class D IP address in the range 224.0.0.1 to 239.255.255.255 identifies a host group. |
| SSLVersion | “TLS”, “SSL_V23” and “TLS_V1”. If this parameter is not defined SSL is disabled for this server. Works only with TCP protocol |
| SSLCertificate | PEM encoded SSL Certificate in string format |
| SSLKey | PEM encoded Private Key for the SSL Certificate in string format |
| SSLAuthority | PEM encoded CA Certificates in string format. |
| timeout | Timeout in seconds. Use only if you are using FMS version. |
| dataAPIUser | User name to access server solution (this account has to have rights for accessing FileMaker Data API). Use only if you are using FMS version. |
| dataAPIPassword | Password to access solution on the master FileMaker Server. Use only if you are using FMS version. |
| dataAPILayout | Layout on with script is executed FileMaker Server. Use only if you are using FMS version. |
| openhandler | Sends “Welcome to SimpleTalk” to the client. |
| datahandler | Receives data with one STalk_Receive call and performs actions if
the received data matches to one of the following patterns: * RUN schedules the specified script to run, returns “OK” if successfully scheduled, or “ERROR” if the script could not be scheduled * EVAL evaluates the specified calculation in the current context (of the frontmost window) and returns the result * QUIT closes the connection from the server side |
| closehandler | Does not do anything. |
Start listening for incoming connections on the specified port. When new connection is opened, openhandler is called. The data received through the connection are stored in a queue. When a terminator (CRLF by default) is present in the connection queue, datahandler is called and connectionID is passed to it as parameter. Datahandler is responsible for clearing the beginning of the queue up to the terminator (inclusively) using the STalk_Receive function. With the exception of UDP (see below), failure to call STalk_Receive inside the datahandler can result in an endless loop and make FileMaker unresponsive. When the connection closes, closehandler is called. Neither openhandler nor closehandler are required to call STalk_Receive.
In case of UDP, it does not make any sense to pass connectionID to datahandler because it’s a connectionless protocol. The message is passed directly as a script parameter. There is no need to call STalk_Receive.
In case of selected protocol DICOM, Modality Worklist Service Class Provider (SCP) is created and it starts listening on specified port for incoming Associations. After successfully establishing Association, it expects C-FIND request. Then the requested dataset is parsed into json format and sent to FM through datahandler. SCP is then waiting for STalk_Send to receive the data which is parsed into DICOM format and sent through C-FIND response and Association is released.
Returns server ID if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_StartServer( 3333 ; "" )This function will start a TCP server without SSL on port 3333 with default handlers, encoding and terminator. To verify that the server is listening, you can connect to it via:
% telnet localhost 3333STalk_StartServer(
3333;
List(
"protocol=TCP";
"openHandler=openHandlerScript" ;
"dataHandler=dataHandlerScript" ;
"closeHandler=closeHandlerScript"
)
)This function will start a server on port 3333 with these scripts as
handlers: openHandlerScript, dataHandlerScript
and closeHandlerScript. For example,
# openHandlerScript
Set Variable [ $$log ; Value: "Hello!" ]
Set Field [ table::STalkLog ; $$log ]# dataHandlerScript
Set Variable [ $data ; Value: STalk_Receive( Get(ScriptParameter )) ]
Set Variable [ $$log ; Value: $$log & ¶ & $data ]
Set Field [ table::STalkLog ; $$log ]# closeHandlerScript
Set Variable [ $$log ; Value: $$log & ¶ & "Bye!" ]
Set Field [ table::STalkLog ; $$log ]TCP is connection-oriented communication. The connectionID
is passed as a script parameter in dataHandlerScript. Call
STalk_Receive to fetch the data and drain the socket
buffer.
STalk_StartServer(
3333 ;
List (
"protocol=TCP" ;
"SSLVersion=TLS" ;
"openHandler=openHandlerScript" ;
"dataHandler=dataHandlerScript" ;
"closeHandler=closeHandlerScript" ;
"SSLCertificate" & Substitute( table::certificate ; "¶" ; Char(10) ) ;
"SSLKey=" & Substitute ( table::key ; "¶" ; Char(10) ) ;
"SSLAuthority=" & Substitute ( table::authority ; "¶" ; Char(10) )
)
)This function will start a TCP server on port 3333 with SSL enabled.
Here, table::certificate, table::key and
table::authority are multiline text fields in the form:
-----BEGIN CERTIFICATE-----
MIIEMzCCA...
-----END CERTIFICATE-----or similar. Note that inserting the certificate as a FileMaker text
variable causes line breaks be interpreted as carriage return symbols
(¶ = Char(13)). To parse the parameters correctly, we need
to substitute carriage return symbols with line feeds
(\n = Char(10)). To verify that the server is listening,
you can connect to it via:
% openssl s_client -connect localhost:3333 -crlf STalk_StartServer (
3333;
List (
"protocol=UDP";
"UDPSocketType=Multicast";
"MulticastGroup=239.255.255.250";
"dataHandler=dataHandlerScriptUDP"
)
)where
# dataHandlerScriptUDP
Set Variable [ $data ; Value: Get(ScriptParameter ) ]
Set Variable [ $$log ; Value: $$log & $data ]
Set Field [ table::STalkLog ; $$log ]This function will start a UDP server on port 3333 that will listen for Multicast messages with SSDP Group. UDP is a connectionless protocol, hence the data handler receives the packet directly as a script parameter. You can verify that server is up using
% nc -u 239.255.255.250 3333STalk_StartServer (
3328 ;
List (
"protocol=dicom" ;
"datahandler=script" ;
"encoding=UTF-8" ;
"timeout=10" ;
"dataAPIUser=Admin" ;
"dataAPIPassword=your_very_strong_password" &
"dataAPILayout=dapi" ;
) ;
"|"
) This function will start a DICOM server on port 3328. This can only be run on a FileMaker Server. Setting up DICOM communication is technically involved. Please contact 24U support for help.
| serverID | value returned by StartServer function |
Close all open connections and shut the specified server down.
Returns “0”, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_StopServer( 42 )Stops server with ID 42 - if existed.
| host | Domain name or IP address of the server to connect to |
| port | remote port number to connect to |
| connectionOptions | List of options for this connection in format “option1=value1¶option2=value2”. For more information see connectionOptions table. If empty string -> default options are used. |
| terminator | string for splitting the data (default is CRLF). (see the note below) This value is also used as a default terminator for all further connection operations. |
| Options | Supported Values |
|---|---|
| protocol | “TCP” (default), additional options may be supported in future versions |
| datahandler | name of script to run (default datahandler does nothing). Please read note to enable handlers in FileMaker version 19.2.1 and newer |
| closehandler | name of script to run (default is built-in handler), when the connection is closed. Please read note to enable handlers in FileMaker version 19.2.1 and newer |
| encoding | “UTF-8”, “UTF-16”, “UTF-16BE”, “UTF-16LE”, “ASCII”, “Hex” (see the note below). This value is also used as a default encoding for all further server connections. If this value is not defined UTF-8 will be used. |
| timeout | number of seconds to wait for a connection (default is 60). This value is also used as a default timeout for all further connection operations. |
| idle | number of seconds to wait after last send or receive operation before automatically closing the connection (default is 600) |
| SSLVersion | “TLS”, “SSL_V23” and “TLS_V1”. If this parameter is not defined SSL is disabled for this server. Works only with TCP protocol |
| SSLCertificate | PEM encoded SSL Certificate in string format |
| SSLKey | PEM encoded Private Key for the SSL Certificate in string format |
| SSLAuthority | PEM encoded CA Certificates in string format. |
Open a connection to the specified host. Datahandler and close handler are called in the same way as described in STalk_StartServer function reference.
Note: This command is not intended to connect to a server running on the same computer. Doing so will run into errors. (If you want to test the plug-in this way, you need to download two different versions of FileMaker: one for the server and one for the client.)
Returns positive connectionID if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Connect ( "1.1.1.1" ; "80" ; "")Connects to server with IP 1.1.1.1 using port 80.
STalk_Connect ( "192.168.0.1"; "33" ; "encoding=UTF-8" ; "\>")Connects to server with IP 192.168.0.1 using port 33. Encoding for communication UTF-8, character > is used as a terminator.
| serverID | value returned by StartServer function |
Close and invalidate the specified connection.
Returns “0” if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Disconnect ( 4 )Disconnects from with given serverID.
| host | Domain name or IP address of the server to connect to. Host is ignored when sending multicast or broadcast messages so you may leave it as empty string. |
| port | remote port number to connect to |
| connectionOptions | List of options for this connection in format “option1=value1¶option2=value2”. For more information see connectionOptions table. If empty string -> default options are used. |
| terminator | a string to be added to the end of the data being sent (CRLF by default) (see the note below) |
| data | data to be sent |
| Options | Supported Values |
|---|---|
| protocol | “TCP” (default), “UDP”, additional options may be supported in future versions |
| encoding | “UTF-8” (default) or “UTF-16” or “UTF-16BE” or “UTF-16LE” or “ASCII” or “Hex” (see the note below) |
| waitForReply | For TCP, this controls whether we should wait for a reply from server and return it as output of the calculation. Supported values are “yes” or “no”. Default value is “yes”. |
| timeout | Maximum number of seconds to wait for connection and response
together. This is similar to --max-time in curl. Default
value is 60. |
| connectionTimeout | Maximum number of seconds to wait for connection alone. This is
similar to --connect-timeout in curl. Default value is
60. |
| UDPSocketType | “Unicast”, “Broadcast”, or “Multicast”. If this option is not
defined, Unicast will be used. Works only with UDP protocol. Multicast fails from Parallels Virtual Machine when using a Shared network. You need to switch to a Bridged network. |
| BroadcastSubnet | Specifies subnet for broadcast connections. Works only with the UDP protocol with the “Broadcast” UDPSocketType. If not used broadcast will be send to default broadcast IP 255.255.255.255. |
| MulticastGroup | Specifies Group for Multicast connections. Works only with the UDP protocol with the “Multicast” UDPSocketType. A class D IP address in the range 224.0.0.1 to 239.255.255.255 identifies a host group. |
| TTL | Time to live (TTL) is the number of hops that limits the lifespan of a UDP packet on network. Default is 60. |
| SSLVersion | “TLS”, “SSL_V23” and “TLS_V1”. If this parameter is not defined SSL is disabled for this server. Works only with TCP protocol. |
| SSLCertificate | PEM encoded SSL Certificate in string format |
| SSLKey | PEM encoded Private Key for the SSL Certificate in string format |
| SSLAuthority | PEM encoded CA Certificates in string format |
| autoconvert | “yes” or “no” (default is “yes”) |
| localTerminator | string which will be replaced with terminator (default is line end) |
Connect to the specified host/port, send the data (and terminator),
wait for reply (until the other side closes connection or the time is
out), close the connection and return the reply. If
autoconvert is specified, each occurrence of
local_terminator in data is replaced with terminator. Also, each
occurrence of terminator in the reply is replaced with local terminator.
This is useful e.g. when you want to send more lines separated with CRLF
instead of line ends. (This is the default behaviour.)
Returns the received reply if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Send ( "192.168.0.1" ; "1234" ; "waitForReply=no" ; "Hello, world!" )Sends a string to address 192.168.0.1 using TCP on port 1234 without expecting any reply. The default terminator (CRLF) is used. It returns error when the server is unavailable.
STalk_Send ( "192.168.0.1" ; "1234" ; "timeout=10" ; "Hello, server. If you are reading this, the demo worked!" )Sends a string to address 192.168.0.1 using TCP on port 1234. It waits for a reply by the server (up to ten seconds) and returns the reply as output. For example, if the server side uses the following data handler:
# dataHandlerScript
Set Variable [ $conID ; Get( ScriptParameter ) ]
Set Variable [ $msg ; STalk_Receive( $conID ) ]
Set Field [ table::STalkMsg ; $msg ]
Send( $conID; "Hello, client. Yes, the demo worked. Miracles do happen." )then STalk_Send function should return: “Hello, client.
Yes, the demo worked. Miracles do happen.” Without such handler,
STalk_Send stalls for 10 seconds and returns a timeout
error.
STalk_Send ( "192.168.0.1" ; "1234" ; "protocol=UDP" ; "Hello, world!" )Sends a UDP message to “192.168.0.1:1234”. It does not expect any reply. UDP is the most lightweight protocol. It is very fast but will not return an error even when the server is unavailable.
STalk_Send (
"" ;
"1234" ;
List( "protocol=UDP" ; "UDPSocketType=Multicast" ; "MulticastGroup=239.255.255.250" ; "autoconvert=yes" ; "localTerminator=|" ) ;
"First message | second message"
)Sends a UDP message to multicast group “239.255.255.250”, replacing “|” with the default terminator (CRLF).
| connectionID | numerical identification of an open connection (result of STalk_Connect or handlers’s script parameter) |
| encoding | “UTF-8” or “UTF-16” or “UTF-16BE” or “UTF-16LE” or “ASCII” or “Hex” (see the note below). (inherited from connection by default) |
| terminator | string for splitting the data (inherited from connection by default). (see the note below) |
| data | data to be send. |
Send the data to the other side of an open connection. Automatically append the connection’s terminator to the end of the data.
In case of DICOM protocol, data are datasets delimited with terminator. Each dataset is send separately in C-FIND-RSP according to DICOM standard.
Returns positive number of bytes sent (including terminator) if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Send ( 1 ; "SimpleTalk says hi!")Sends a message to connection 1. Default terminator is used.
STalk_Send ( 2 ; "Hex" ; "596f75206465636f646564206d7920736563726574206d657373616765203a2d29" )Sends some binary data to connection 2 with the hexadecimal equivalent of default terminator: “0d0a”.
STalk_Send ( 3 ; "UTF-16" ; "|" ; "Hello|World!")Sends a message to connection 3. Terminator “|” will be appended to the message. Then, it will be converted to binary using the big endian UTF-16 encoding. Assuming the target server uses the same encoding and terminator, it will receive two messages: “Hello” and “World!”.
| connectionID | numerical identification of an open connection (result of STalk_Connect or handler’s script parameter) |
| encoding | “UTF-8” or “UTF-16” or “UTF-16BE” or “UTF-16LE” or “ASCII” or “Hex” (see the note below). (inherited from connection by default) |
| terminator | string for splitting the data (inherited from connection by default). (see the note below) |
| timeout | time in seconds to wait for data before timing out (use connection’s timeout by default), 0 for “don’t wait” (return immediately either data or an error code) |
Read data from an open connection’s buffer up to the terminator. Terminator is read but not returned.
Returns data read (without terminator) if successful, or “?” in case of an error. Use STalk_Get to obtain the last error code and message. (If last error is “0”, it means “?” is the data sent.)
STalk_Receive ( 42 )Tries to receive data from connection with ID 42.
| selector | specifies operation |
| connectionOrServerID | value returned by StartServer or Connect functions |
| “local-ip” | Local IP address |
| “local-port” | Local port number associated with the specified server or connection |
| “remote-ip” | IP address of the remote side of the connection |
| “remote-port” | Port number of the remote side of the connection |
| “encoding” | Default encoding for the connection |
| “frontmost” | 1 if FileMaker is the frontmost application, 0 otherwise |
| “helper-status” | return 0 if HelperApp is running, error code if not. Works only on FMS. |
| “connection-status” | return 0 if server/connection is running, error code if not. Works only on FMS. |
| “enable-ssl” | Returns if SSL/TSL communication is enabled |
| “lastError” | Returns error code from the last plugin call |
| “lastErrorMessage” | Returns error text description from the last plugin call |
Returns current value of a global variable or a connection/server option specified by selector.
Returns requested value, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Get( "local-ip" )Returns IP address of the local pc.
| selector | specifies operation |
| connectionOrServerID | value returned by StartServer or Connect functions |
| “encoding” | Modifies the default encoding of the specified server or connection. |
| “frontmost” | Brings FileMaker to front or sends it to back. |
| “enable-ssl” | Enable or Disable SSL/TSL protocol for TCP servers. |
Modifies value of a global variable or a connection/server option specified by selector.
Returns 0, or “?” in case of an error. Use STalk_Get to obtain the last error code and message.
STalk_Set( "encoding" ; "UTF-16" )Sets default encoding to “UTF-16”.
STalk_Set( "frontmost" ; True )Brings FileMaker to the front.
Encoding of data defines the way how the content passed to SimpleTalk is converted into binary form for sending through network and vice versa. Hence it is important that each side of the connection is synchronized with each other and uses the same encoding.
| UTF-8 | Each character of the text is encoded with variable length of one to four bytes. UTF-8 is a direct extension of ASCII. |
| UTF-16BE | Each character of the text is encoded with two bytes. Big endian ordering is used. |
| UTF-16LE | Each character of the text is encoded with two bytes. Low endian ordering is used. |
| UTF-16 | This is synonym for UTF-16BE |
| ASCII | Each character of the text is encoded with one byte (that begins with a zero bit). Only the basic 128 ASCII characters will be sent unchanged. Other characters will be replaced with ‘?’. |
| Hex | The text is taken as a hexadecimal representation of binary data. (i.e. each pair of characters represents one byte) |
FileMaker 19.2.1 and newer added security feature that blocks script calls from Plug-Ins to solutions. In order for handlers to be called, your solution has to enable fmplugin (Validate cross-file plug-in access) privilege set To do so: With your solution opened -> In “File” menu go to “Manage” -> “Security…” then go to “Extended Privileges” tab and enable fmplugin (Validate cross-file plug-in access) privilege set.
DICOM protocol Limitation: do not use ¶ as a terminator
Terminator is a couple of bytes which splits the transferred data into logical blocks. Of course, both sides of the connection should use the same terminators to achieve the requested behaviour. When a terminator is specified as an optional parameter to some Plug-In’s function, it is encoded into binary form with the same encoding which is given to encode/decode the data. The only exception is default terminator CRLF, which already has exact binary interpretation. When the given terminator is an empty string, its behaviour is a little bit special and depends on the calling function:
| STalk_StartServer,STalk_Connect | data handler is never called |
| STalk_Send(connectionID,…) | normal behaviour, i.e. nothing is appended to the data sent |
| STalk_Receive | waits for timeout or the disconnection from the other side, then returns everything it received |
| STalk_Send(host…) | partially normal behaviour: nothing is appended to the data sent, occurrences of local_terminator are replaced with empty string,but the received data are not changed. |
For Hex encoding, the terminator must also be a hex string. In this case, the default terminator is “0d0a” (hexadecimal representation of CRLF).
| -1 | HelperApp is not running |
| -2 | This function is allowed to run only on a FileMaker server |
| -3 | Hex encoding was selected but the input data is not a valid hex string |
| -50 | Invalid parameter |
| -1000 | Plug-In requires registration (expired) |
| -3218 | Invalid server ID |
| -3247 | Address/port already in use |
| -3256 | Connection error / not connected. This can also stem from connecting a FileMaker session to itself (which is not allowed) |
| -3157 | WSA internal error |
| -3259 | Connection/request timed out |
| -3260 | Connection refused |
| -3286 | Invalid SSL Certificate, Key or CA |
| 24001 | If you want to keep using the plug-in, you must register it or buy it for particular environment. |
| 24002 | Product expired: Trial period is over. If you want to keep using the product, you must buy it for particular environment. |
| 24003 | SN limit was met: The serial number is already registered on too many computers. |
| 24004 | Product is dead: The product expired and cannot be used any more. Please download the new version from 24U Software. |
| 24005 | Invalid serial number: Serial number you entered is not valid. |
| 24006 | Activation failed: Activation failed probably due to some network error. Please, check your connection to the internet and try again later. |
| 24007 | Deactivation failed: Deactivation failed probably due to some network error. Please, check your connection to the internet and try again later. |
| 24008 | Unknown serial number: The given serial number cannot be used for the current product. It has been stored so that other product can try to use it. |
| 24009 | Blacklisted serial number: The given serial number has been blacklisted and cannot be used anymore. Please, contact 24U Support if you need more information. |
| 24010 | eSellerate engine not installed: This product uses eSellerate to validate user registration and purchases, but its installation failed. Please, reboot the computer or try again later. |